1
コンテナの成長管理:サイズとキャパシティの違い
AI037Lesson 14
00:00

C++では、コンテナの成長を管理することは、 サイズ (現在の要素数)と キャパシティ (予約済みメモリ)の間で行われるアーキテクチャ上の調整です。連続するコンテナ(例: vector および stringなど)において、キャパシティに達すると 再割り当てが発生します。システムはより大きなメモリブロックを見つけ、すべての要素を移動し、古いブロックを破棄します。これは高コストな$O(n)$処理であり、 イテレータ無効化——以前の要素へのポインタが「ダングリング」状態になり、危険な状態になります。

1. 拡張戦略

頻繁な再割り当てを避けるために、 vector 実装は「バッファ」領域を確保します。 c.reserve(n) コマンドは要素を追加せずに最小キャパシティを明示的に設定します。一方、 c.shrink_to_fit() は、余分なメモリをオペレーティングシステムに返すことを非拘束的な要求として行います。

2. resize と reserve の違い

一方、 reserve reserve はバッファにのみ影響を与えます。 resize(n) resize(n) はコンテナの論理を実際に変更します。縮小する場合、 resize 要素が削除されますが、拡大するとデフォルト初期化された値が追加されます。

サイズ(使用中)余剰キャパシティ合計キャパシティ
⚠️ 警告: もし resize コンテナが縮小されると、削除された要素へのイテレータは無効になります。拡大により再割り当てが発生した場合、 すべて イテレータはすべて無効になります。
main.py
TERMINALbash — 80x24
> Ready. Click "Run" to execute.
>